/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.12
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   标签指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef LABELJMPVIEW_H
#define LABELJMPVIEW_H

#include "labeljmpview_global.h"
#include <QWidget>
#include <QTranslator>


class ProgramView;


namespace Ui {
class LabelJmpView;
}

/**
 * @brief The EM_LBLJMP_INSTRUCTION enum　选择不同指令
 */
enum EM_LBLJMP_INSTRUCTION
{
    EM_LBLJMP_INSTRUCTION_LBL = 1,
    EM_LBLJMP_INSTRUCTION_JMP = 2,
    EM_LBLJMP_INSTRUCTION_END = 3,
    EM_LBLJMP_INSTRUCTION_PAUSE = 4,
    EM_LBLJMP_INSTRUCTION_ABORT = 5,
    EM_LBLJMP_INSTRUCTION_CALL = 6,
    EM_LBLJMP_INSTRUCTION_RUN = 7
};

/**
 * @brief The LabelJmpView class　标签指令属性编辑视窗
 */
class LABELJMPVIEWSHARED_EXPORT LabelJmpView : public QWidget
{
    Q_OBJECT

public:
    LabelJmpView(int styleId,QWidget *parent = 0);

    /**
     * @brief updateView    更新设置数据到界面控件上
     */
    void updateView();

    /**
     * @brief getInput      获取界面输入
     */
    void getInput();

    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

    /**
     * @brief getProgromFileName
     * @param fileName
     */
    void setProgromFileName(QString fileName);

private:
    QTranslator translator;

public:
    ProgramView *programView;



    /**
     * @brief instruction   指令
     */
    QString instruction;
    /**
     * @brief lblIndex      标签号
     */
    QString labelStr;
    /**
     * @brief lblDataType   标签号类型　０:常数    1:存储在寄存器R中
     */
    int lblDataType;

    /**
     * @brief callLocation  调用路径
     */
    QString callLocation;
    /**
     * @brief callProgram   调用程序
     */
    QString callProgram;
    /**
     * @brief note          指令注释
     */
    QString note;

    /**
     * @brief selectInstructionFlag　选择指令类型标志
     * １:标签指令  2:跳转指令  3:结束指令  4:暂停指令  5:终止运行指令  6:调用指令  7:开任务指令
     */
    int selectInstructionFlag;

signals:
    /**
     * @brief selectLabelInstruction    选择标签指令
     */
    void selectLabelInstruction();
    /**
     * @brief selectJmpInstruction      选择跳转指令
     */
    void selectJmpInstruction();
    /**
     * @brief selectEndInstruction      选择结束指令
     */
    void selectEndInstruction();
    /**
     * @brief selectPauseInstruction    选择暂停指令
     */
    void selectPauseInstruction();
    /**
     * @brief selectAbortInstruction    选择强制终止指令
     */
    void selectAbortInstruction();
    /**
     * @brief selectCallInstruction     选择调用指令
     */
    void selectCallInstruction();
    /**
     * @brief selectRunInstruction      选择开任务指令
     */
    void selectRunInstruction();

    /**
     * @brief browseCallProgram         浏览调用文件
     * @param callLocation              浏览路径
     */
    void browseCallProgram(QString oldProgramNameIn);
    /**
     * @brief clearNote                 清除指令注释
     */
    void clearNote();
    /**
     * @brief finishEditInstruction     完成指令编辑
     */
    void finishEditInstruction();
    /**
     * @brief saveInstruction           保存指令
     * @param instruction               编辑完成指令
     */
    void saveInstruction(QString instruction);


private slots:
    /**
     * @brief on_LBL_radioButton_clicked    选择标签指令槽函数
     */
    void on_LBL_radioButton_clicked();

    /**
     * @brief on_JMP_radioButton_clicked    选择跳转指令槽函数
     */
    void on_JMP_radioButton_clicked();

    /**
     * @brief on_END_radioButton_clicked    选择结束指令槽函数
     */
    void on_END_radioButton_clicked();

    /**
     * @brief on_PAUSE_radioButton_clicked  选择暂停指令槽函数
     */
    void on_PAUSE_radioButton_clicked();

    /**
     * @brief on_ABORT_radioButton_clicked  选择强制终止指令槽函数
     */
    void on_ABORT_radioButton_clicked();

    /**
     * @brief on_CALL_radioButton_clicked   选择调用指令槽函数
     */
    void on_CALL_radioButton_clicked();

    /**
     * @brief on_RUN_radioButton_clicked    选择开任务指令槽函数
     */
    void on_RUN_radioButton_clicked();

    /**
     * @brief on_browse_Btn_clicked         浏览调用文件槽函数
     */
    void on_browse_Btn_clicked();

    /**
     * @brief on_clearNote_Btn_clicked      清除指令注释槽函数
     */
    void on_clearNote_Btn_clicked();

    /**
     * @brief on_forward_Btn_clicked        上一页槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_save_Btn_clicked           保存指令槽函数
     */
    void on_save_Btn_clicked();

private:
    Ui::LabelJmpView *ui;


};

#endif // LABELJMPVIEW_H
